package models

import (
	"gorm.io/gorm"
	"order_srv/basic/config"
	"time"
)

// 用户表
type User struct {
	Id                      uint64         `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	NickName                string         `gorm:"column:nick_name;type:varchar(255);comment:昵称;default:NULL;" json:"nick_name"`                                           // 昵称
	RealName                string         `gorm:"column:real_name;type:varchar(255);comment:真实姓名;default:NULL;" json:"real_name"`                                         // 真实姓名
	Mobile                  string         `gorm:"column:mobile;type:varchar(255);comment:电话号码;default:NULL;" json:"mobile"`                                               // 电话号码
	Password                string         `gorm:"column:password;type:varchar(255);comment:密码;default:NULL;" json:"password"`                                             // 密码
	IdCard                  string         `gorm:"column:id_card;type:varchar(255);comment:身份证号;default:NULL;" json:"id_card"`                                             // 身份证号
	Sex                     string         `gorm:"column:sex;type:varchar(255);comment:性别;default:NULL;" json:"sex"`                                                       // 性别
	Address                 string         `gorm:"column:address;type:varchar(255);comment:地址;default:NULL;" json:"address"`                                               // 地址
	UserRegisterTime        time.Time      `gorm:"column:user_register_time;type:datetime;comment:用户注册时间;default:NULL;" json:"user_register_time"`                         // 用户注册时间
	UserLoginTime           time.Time      `gorm:"column:user_login_time;type:datetime;comment:用户上次登录时间;default:NULL;" json:"user_login_time"`                             // 用户上次登录时间
	LastLoginMethod         uint32         `gorm:"column:last_login_method;type:int UNSIGNED;comment:上次登录方式;default:NULL;" json:"last_login_method"`                       // 上次登录方式
	LastLoginTimeOnScreen   time.Time      `gorm:"column:last_login_time_on_screen;type:datetime;comment:上次登录大屏时间;default:NULL;" json:"last_login_time_on_screen"`         // 上次登录大屏时间
	LastLoginMethodOnScreen uint32         `gorm:"column:last_login_method_on_screen;type:int UNSIGNED;comment:上次登录大屏方式;default:NULL;" json:"last_login_method_on_screen"` // 上次登录大屏方式
	LastOrderTime           time.Time      `gorm:"column:last_order_time;type:datetime;comment:最近下单时间;default:NULL;" json:"last_order_time"`                               // 最近下单时间
	CType                   int32          `gorm:"column:c_type;type:int;comment:状态：1：已实名，2：未实名;default:NULL;" json:"c_type"`                                              // 状态：1：已实名，2：未实名
	PayType                 int32          `gorm:"column:pay_type;type:int;comment:支付偏好：1：微信，2：支付宝;default:NULL;" json:"pay_type"`                                         // 支付偏好：1：微信，2：支付宝
	UserRole                uint8          `gorm:"column:user_role;type:tinyint UNSIGNED;comment:用户角色: 1乘客 2司机 3管理员;not null;" json:"user_role"`                           // 用户角色: 1乘客 2司机 3管理员
	CreatedAt               time.Time      `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt               time.Time      `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt               gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (u *User) TableName() string {
	return "user"
}

func (u *User) GetUserById() error {
	return config.DB.Where("id = ?", u.Id).Find(&u).Error
}

// GetUserId 获取用户的Id
func (u *User) GetUserId() error {
	return config.DB.First(&u).Error
}

func (u *User) GetUserFInd() (GetUserFInd []*User, err error) {
	err = config.DB.Find(&GetUserFInd).Error
	return
}
